MatplotlibãšãŠã£ãžã§ããã䜿ã£ãŠã€ã³ã¿ã©ã¯ãã£ããªãããããäœæããããŒã¿ããæ·±ãæŽå¯ãåŸãæ¹æ³ãæ¢æ±ããŸããã¹ã©ã€ããŒããã¿ã³ãããããããŠã³ã§åçãªèŠèŠåã匷åããŸãããã
ã€ã³ã¿ã©ã¯ãã£ããªããŒã¿å¯èŠåïŒMatplotlibãŠã£ãžã§ããçµ±åã«ããåçãªæŽå¯
ããŒã¿å¯èŠåã¯ãããŒã¿ãµã€ãšã³ã¹ãšåæã«ãããŠéèŠãªèŠçŽ ã§ããéçãªããããã貎éãªæŽå¯ãæäŸããŸãããã€ã³ã¿ã©ã¯ãã£ããªããããã¯ããŠãŒã¶ãŒãããŒã¿ãåçã«æ¢çŽ¢ããé ãããã¿ãŒã³ãçºèŠããè€éãªé¢ä¿ãããæ·±ãçè§£ããããšãå¯èœã«ããŸããå¯èŠåãäœæããããã®åºã䜿çšãããŠããPythonã©ã€ãã©ãªã§ããMatplotlibã¯ããŠã£ãžã§ãããçµ±åãã匷åãªæ©èœãæäŸãããŠãŒã¶ãŒå ¥åã«å¿çããã€ã³ã¿ã©ã¯ãã£ããªãããããæ§ç¯ã§ããŸãã
MatplotlibãŠã£ãžã§ããã®çè§£
MatplotlibãŠã£ãžã§ããã¯ãMatplotlibã®å³åœ¢å ã«åã蟌ãããšãã§ããã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ïŒGUIïŒèŠçŽ ã§ãããããã®ãŠã£ãžã§ããã«ããããŠãŒã¶ãŒã¯ãªã¢ã«ã¿ã€ã ã§ãããããæäœã§ããããŒã¿æ¢çŽ¢ã«å®è·µçãªã¢ãããŒããæäŸããŸããMatplotlibãŠã£ãžã§ããã®äžè¬çãªçš®é¡ã«ã¯ã以äžãå«ãŸããŸãã
- ã¹ã©ã€ããŒ: æ°å€ãã©ã¡ãŒã¿ãé£ç¶çã«èª¿æŽããŸãã
- ãã¿ã³: ç¹å®ã®ã¢ã¯ã·ã§ã³ãã€ãã³ããããªã¬ãŒããŸãã
- ã©ãžãªãã¿ã³: ãªã¹ããã1ã€ã®ãªãã·ã§ã³ãéžæããŸãã
- ãã§ãã¯ãã¿ã³: è€æ°ã®ãªãã·ã§ã³ããªã³ãŸãã¯ãªãã«åãæ¿ããŸãã
- ããã¹ãããã¯ã¹: ããã¹ãå€ãå ¥åããŸãã
- ããããããŠã³ïŒã¡ãã¥ãŒïŒ: ããããããŠã³ãªã¹ããããªãã·ã§ã³ãéžæããŸãã
ãããã®ãŠã£ãžã§ãããããããã®ããŒã¿ãè¡šç€ºã«æ¥ç¶ããããšã§ãåçã§é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãã
ç°å¢ã®ã»ããã¢ãã
å§ããåã«ãå¿
èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ãããJupyter Notebookç°å¢ã§äœæ¥ããŠããå Žåã¯ãMatplotlibãšipywidgetsãå¿
èŠã«ãªãå¯èœæ§ããããŸããpipã䜿çšããŠã€ã³ã¹ããŒã«ããŸãã
pip install matplotlib ipywidgets
Jupyter Notebookå
ã§ãŠã£ãžã§ããã䜿çšããã«ã¯ãipywidgetsæ¡åŒµæ©èœãæå¹ã«ããå¿
èŠãããå ŽåããããŸãã
jupyter nbextension enable --py widgetsnbextension
ã¹ã©ã€ããŒã䜿ã£ãã·ã³ãã«ãªã€ã³ã¿ã©ã¯ãã£ãããããã®äœæ
åºæ¬çãªäŸããå§ããŸããããæ£åŒŠæ³¢ã®ãããããäœæããã¹ã©ã€ããŒã䜿çšããŠãã®åšæ³¢æ°ãå¶åŸ¡ããŸãã
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
# Define the initial frequency
init_freq = 2
# Define the time axis
t = np.linspace(0, 1, 1000)
# Define the sine wave function
s = lambda f, t: np.sin(2 * np.pi * f * t)
# Create the figure and axes objects
fig, ax = plt.subplots()
line, = ax.plot(t, s(init_freq, t), lw=2)
ax.set_xlabel('Time [s]')
# Adjust the subplots parameters to give some space for the sliders and buttons
fig.subplots_adjust(left=0.25, bottom=0.25)
# Create the slider axis
axfreq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
# Create the slider
freq_slider = Slider(
ax=axfreq,
label='Frequency [Hz]',
valmin=0.1,
valmax=30,
valinit=init_freq,
)
# Define the update function
def update(val):
freq = freq_slider.val
line.set_ydata(s(freq, t))
fig.canvas.draw_idle()
# Connect the slider to the update function
freq_slider.on_changed(update)
# Show the plot
plt.show()
ãã®ã³ãŒãã¯ãæ£åŒŠæ³¢ã®ãããããšãæ³¢ã®åšæ³¢æ°ã倿Žã§ããã¹ã©ã€ããŒãäœæããŸããã¹ã©ã€ããŒã®å€ã倿Žããããã³ã«update颿°ãåŒã³åºããããããããããã«å¿ããŠæŽæ°ãããŸãã
ããããããªã»ãããããã¿ã³ã®è¿œå
åšæ³¢æ°ãåæå€ã«æ»ããã¿ã³ã远å ããŸãããã
# Create the reset button axis
reset_ax = fig.add_axes([0.8, 0.025, 0.1, 0.04])
# Create the reset button
reset_button = Button(reset_ax, 'Reset', hovercolor='0.975')
# Define the reset function
def reset(event):
freq_slider.reset()
# Connect the button to the reset function
reset_button.on_clicked(reset)
ãã®ã³ãŒãã¯ãããããã«ãªã»ãããã¿ã³ã远å ããŸããã¯ãªãã¯ãããšãã¹ã©ã€ããŒãåæå€ã«ãªã»ãããããæ£åŒŠæ³¢ã®åšæ³¢æ°ã广çã«ãªã»ãããããŸãã
颿£çãªéžæã®ããã®ã©ãžãªãã¿ã³ã®äœ¿çš
ã©ãžãªãã¿ã³ã¯ãäºåå®çŸ©ãããéžæè¢ã®ã»ãããã1ã€ã®ãªãã·ã§ã³ãéžæããã®ã«åœ¹ç«ã¡ãŸããæ³¢åœ¢ã®çš®é¡ïŒæ£åŒŠæ³¢ãäœåŒŠæ³¢ããŸãã¯æ¹åœ¢æ³¢ïŒãéžæããã©ãžãªãã¿ã³ã远å ããŸãããã
# Create the radio buttons axis
rax = fig.add_axes([0.025, 0.5, 0.15, 0.15])
# Create the radio buttons
radio_buttons = RadioButtons(rax, ('Sine', 'Cosine', 'Square'), active=0)
# Define the waveform functions
def sine(f, t):
return np.sin(2 * np.pi * f * t)
def cosine(f, t):
return np.cos(2 * np.pi * f * t)
def square(f, t):
return np.sign(np.sin(2 * np.pi * f * t))
wave_functions = {
'Sine': sine,
'Cosine': cosine,
'Square': square
}
# Define the function to update the waveform
def update_waveform(label):
wave_function = wave_functions[label]
line.set_ydata(wave_function(freq_slider.val, t))
fig.canvas.draw_idle()
# Connect the radio buttons to the update function
radio_buttons.on_clicked(update_waveform)
ããã§ãã©ãžãªãã¿ã³ã䜿ã£ãŠç°ãªã波圢ãåãæ¿ããããšãã§ããŸããããã¯ãã©ãžãªãã¿ã³ã䜿çšããŠããããã®é¢æ£çãªåŽé¢ãå¶åŸ¡ããæ¹æ³ã瀺ããŠããŸãã
ããããããŠã³ã¡ãã¥ãŒã®å®è£
ããããããŠã³ã¡ãã¥ãŒïŒãŸãã¯ãªãã·ã§ã³ã¡ãã¥ãŒïŒã¯ããªãã·ã§ã³ã®ãªã¹ãããéžæããã³ã³ãã¯ããªæ¹æ³ãæäŸããŸããããããããŠã³ã¡ãã¥ãŒã䜿çšããŠããããã®ç·ã®è²ãå¶åŸ¡ããããšããŸãããã
from matplotlib.widgets import Button, Slider, RadioButtons, CheckButtons, TextBox, Dropdown
#Define axis for the dropdown menu
dropdown_ax = fig.add_axes([0.025, 0.3, 0.15, 0.04])
#Define the dropdown widget
dropdown = Dropdown(
dropdown_ax, 'Line Color',
options=['blue', 'red', 'green'],
color='0.9',
hovercolor='0.7'
)
#Update line color based on dropdown selection
def update_color(label):
line.set_color(label)
fig.canvas.draw_idle()
#Connect dropdown to update function
dropdown.on_changed(update_color)
ããã«ããããŠãŒã¶ãŒã¯ããããããŠã³ã¡ãã¥ãŒããç·ã®è²ãéžæãããããããåçã«æŽæ°ã§ããŸããããã¯ãéãããæç¢ºãªãªãã·ã§ã³ã®ãªã¹ããæç€ºããè¯ãæ¹æ³ã§ãã
è€æ°ã®éžæã®ããã®ãã§ãã¯ãã¿ã³ã®æäœ
ãã§ãã¯ãã¿ã³ã䜿çšãããšãè€æ°ã®ãªãã·ã§ã³ããªã³ãŸãã¯ãªãã«åãæ¿ããããšãã§ããŸããããã¯ãç°ãªãããŒã¿ç³»åãããããèŠçŽ ã®å¯èŠæ§ãå¶åŸ¡ããã®ã«åœ¹ç«ã¡ãŸããæ£åŒŠæ³¢ãäœåŒŠæ³¢ãæ¹åœ¢æ³¢ã®å¯èŠæ§ãåæã«åãæ¿ãããã§ãã¯ãã¿ã³ãäœæããŸãããïŒãã ããåã®äŸã§ã¯ãã©ãžãªãã¿ã³ã®éžæã«åºã¥ããŠçžäºæä»çã§ãïŒã
#Create axes for check buttons
check_ax = fig.add_axes([0.025, 0.7, 0.15, 0.15])
#Initial visibility states
visibility = [True, False, False] #Sine visible, others not.
#Define check button widget
check = CheckButtons(check_ax, ['Sine', 'Cosine', 'Square'], visibility)
#Update function to toggle lines
def func(label):
index = ['Sine', 'Cosine', 'Square'].index(label)
visibility[index] = not visibility[index] #Toggle the state
#Depending on how your plot is structured, you might need
#to access and modify line objects to control their visibility.
#This example assumes you're working with three lines that were created elsewhere.
if label == 'Sine':
#Show/Hide Sine wave. (You will need to define a sine_line object earlier)
pass #sine_line.set_visible(visibility[0]) #Uncomment when a sine_line object is available
elif label == 'Cosine':
#Show/Hide Cosine wave. (You will need to define a cosine_line object earlier)
pass #cosine_line.set_visible(visibility[1]) #Uncomment when a cosine_line object is available
else:
#Show/Hide Square wave. (You will need to define a square_line object earlier)
pass #square_line.set_visible(visibility[2]) #Uncomment when a square_line object is available
fig.canvas.draw_idle()
#Connect check buttons to update function
check.on_clicked(func)
ã«ã¹ã¿ã å ¥åã®ããã®ããã¹ãããã¯ã¹ã®äœ¿çš
ããã¹ãããã¯ã¹ã䜿çšãããšããŠãŒã¶ãŒã¯ã«ã¹ã¿ã ããã¹ãå€ãå ¥åã§ããŸããããã¯ãããŒã¿ã®ãã£ã«ã¿ãªã³ã°ããã¡ã€ã«ãã¹ã®æå®ããŸãã¯ãã®ä»ã®ããã¹ãããŒã¹ã®å ¥åã®æäŸã«åœ¹ç«ã¡ãŸãããŠãŒã¶ãŒãããããã®ã¿ã€ãã«ãæå®ã§ããããã¹ãããã¯ã¹ã远å ããŸãããã
from matplotlib.widgets import TextBox
# Define axis for text box
text_box_ax = fig.add_axes([0.25, 0.025, 0.65, 0.04])
# Define the text box widget
text_box = TextBox(text_box_ax, 'Plot Title: ', initial='Sine Wave Plot')
# Update the title of the plot
def update_title(text):
ax.set_title(text)
fig.canvas.draw_idle()
# Connect text box to update function
text_box.on_submit(update_title)
ããã§ããŠãŒã¶ãŒã¯ããã¹ãããã¯ã¹ã«ã«ã¹ã¿ã ã¿ã€ãã«ãå
¥åã§ããããããã®ã¿ã€ãã«ã¯ããã«å¿ããŠæŽæ°ãããŸããããã§ã¯on_submitã䜿çšãããŠãããããã¯ãŠãŒã¶ãŒãããã¹ãããã¯ã¹ã§Enter/ReturnãæŒããåŸã«ãã®é¢æ°ãåŒã³åºãããããšãæå³ããŸãããŠãŒã¶ãŒãå
¥åãããã³ã«ãªã¢ã«ã¿ã€ã ã§æŽæ°ããããã«on_text_changeã䜿çšããããšãã§ããŸãããããã«ããè€éãªããããã§ã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
- ããã©ãŒãã³ã¹: ã€ã³ã¿ã©ã¯ãã£ããªããããã¯ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ããã§ã¯èšç®è² è·ãé«ããªãå¯èœæ§ããããŸããã¹ã ãŒãºãªã€ã³ã¿ã©ã¯ã·ã§ã³ã確ä¿ããããã«ã³ãŒããæé©åããŠãã ãããããŒã¿ã®éåŒããäžéçµæã®ãã£ãã·ã¥ãªã©ã®ãã¯ããã¯ã®äœ¿çšãæ€èšããŠãã ããã
- ã€ãã³ãåŠç: Matplotlibã¯ããŠã£ãžã§ããã®å€æŽä»¥å€ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¿çããããã®ããŸããŸãªã€ãã³ãåŠçã¡ã«ããºã ãæäŸããŸããããŠã¹ã¯ãªãã¯ãããŒãã¬ã¹ããã®ä»ã®ã€ãã³ãããã£ããã£ããŠãé«åºŠã«ã«ã¹ã¿ãã€ãºãããã€ã³ã¿ã©ã¯ãã£ããªãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸãã
- ä»ã®ã©ã€ãã©ãªãšã®çµ±å: MatplotlibãŠã£ãžã§ããã¯ãPandasãNumPyãªã©ã®ä»ã®ã©ã€ãã©ãªãšçµã¿åãããŠã匷åãªããŒã¿åæããã³å¯èŠåããŒã«ãäœæã§ããŸãã
- ã«ã¹ã¿ã ãŠã£ãžã§ãã: é«åºŠãªãŠãŒã¹ã±ãŒã¹ã§ã¯ãç¹å®ã®æ©èœãå®è£ ããããã«ç¬èªã®ã«ã¹ã¿ã ãŠã£ãžã§ãããäœæã§ããŸãã
- ãããã€ã¡ã³ã: äžèšã®äŸã¯ããŒã«ã«ã§ã®ã€ã³ã¿ã©ã¯ãã£ããªæ¢çŽ¢ïŒäŸïŒJupyter Notebookå ïŒã«é©ããŠããŸãããããåºç¯ãªã¢ã¯ã»ã¹åãã«ã€ã³ã¿ã©ã¯ãã£ããªããããããããã€ããã«ã¯ãBokehãPlotlyãªã©ã®ã©ã€ãã©ãªãšçµã¿åãããŠFlaskãDjangoã®ãããªWebãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšãããå¿ èŠã«ãªããŸãããããã®ã©ã€ãã©ãªã¯ãWebããŒã¹ã®ã€ã³ã¿ã©ã¯ãã£ããªããã·ã¥ããŒããäœæããããã®æ©èœãæäŸããŸãã
ã€ã³ã¿ã©ã¯ãã£ãããããèšèšã®ãã¹ããã©ã¯ãã£ã¹
- ã·ã³ãã«ããä¿ã€: ããŸãã«ãå€ãã®ã³ã³ãããŒã«ã§ãŠãŒã¶ãŒãå§åããªãããã«ããŠãã ãããæãé¢é£æ§ã®é«ããã©ã¡ãŒã¿ãšã€ã³ã¿ã©ã¯ã·ã§ã³ã«çŠç¹ãåœãŠãŸãã
- æç¢ºãªãã£ãŒãããã¯ãæäŸãã: ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãããããã«æç¢ºãã€å³åº§ã«åœ±é¿ãäžããããšã確èªããŸãã
- çŽæçãªã³ã³ãããŒã«ã䜿çšãã: æå¹ã«ãããããŒã¿ãšã€ã³ã¿ã©ã¯ã·ã§ã³ã®ã¿ã€ãã«é©ãããŠã£ãžã§ãããéžæããŸãã
- ã¢ã¯ã»ã·ããªãã£ãèæ ®ãã: é害ãæã€äººã ã§ã䜿çšã§ããããã«ãã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠã€ã³ã¿ã©ã¯ãã£ããªãããããèšèšããŸãã
- 培åºçã«ãã¹ããã: ããŸããŸãªãŠãŒã¶ãŒã§ã€ã³ã¿ã©ã¯ãã£ããªããããããã¹ããããŠãŒã¶ããªãã£ã®åé¡ãç¹å®ããŠå¯ŸåŠããŸãã
ã°ããŒãã«ãªå¿çšäŸ
ã€ã³ã¿ã©ã¯ãã£ããªããããã¯ãäžçäžã®å¹ åºãåéã§äœ¿çšãããŠããŸããããã€ãã®äŸãæããŸãã
- éèåæ: ãã¬ãŒããŒãã¢ããªã¹ãã¯ãã€ã³ã¿ã©ã¯ãã£ããªããããã䜿çšããŠæ ªåŒåžå ŽããŒã¿ãæ¢çŽ¢ãããã¬ã³ããåæããååŒæ©äŒãç¹å®ããŸããäŸãã°ãæéæ ã調æŽã§ããã€ã³ã¿ã©ã¯ãã£ããªããŒãœã¯è¶³ãã£ãŒãã«ããããŠãŒã¶ãŒã¯ãã¥ãŒãšãŒã¯èšŒåžååŒæããæ±äº¬èšŒåžååŒæãŸã§ãäžçäžã®ããŸããŸãªåžå Žã«ãããäŸ¡æ Œå€åã調ã¹ãããšãã§ããŸãã
- ç§åŠç ç©¶: ç ç©¶è ã¯ãã€ã³ã¿ã©ã¯ãã£ããªããããã䜿çšããŠå®éšããŒã¿ãèŠèŠåããã·ãã¥ã¬ãŒã·ã§ã³ãæ¢çŽ¢ããè€éãªçŸè±¡ã«é¢ããæŽå¯ãåŸãŸããäŸãã°ãæ°åç§åŠè ã¯ã€ã³ã¿ã©ã¯ãã£ããªå°å³ã䜿çšããŠäžçã®ããŸããŸãªå°åã«ãããæž©åºŠå€åãèŠèŠåããç¹å®ã®å°åã«ãããæ°åå€åã®åœ±é¿ã調ã¹ãããšãã§ããŸãã
- ãšã³ãžãã¢ãªã³ã°: ãšã³ãžãã¢ã¯ãã€ã³ã¿ã©ã¯ãã£ããªããããã䜿çšããŠèšèšãã©ã¡ãŒã¿ãåæããããã©ãŒãã³ã¹ãæé©åããåé¡ããã©ãã«ã·ã¥ãŒãã£ã³ã°ããŸããåæšãšã³ãžãã¢ã¯ãæ©ã建ç©ã®ã€ã³ã¿ã©ã¯ãã£ããªã¢ãã«ã䜿çšããŠãç°ãªãè·éæ¡ä»¶ãç°å¢èŠå ã®äžã§ã®æ§é çå®å šæ§ãè©äŸ¡ã§ããŸãã
- ããžãã¹ã€ã³ããªãžã§ã³ã¹: äŒæ¥ã¯ãã€ã³ã¿ã©ã¯ãã£ããªããã·ã¥ããŒãã䜿çšããŠäž»èŠæ¥çžŸè©äŸ¡ææšïŒKPIïŒã远跡ãã販売ãã¬ã³ããç£èŠããæ¹åã®äœå°ãããé åãç¹å®ããŸããäžççãªå°å£²äŒæ¥ã¯ãã€ã³ã¿ã©ã¯ãã£ããªããã·ã¥ããŒãã䜿çšããŠç°ãªãåœã§ã®è²©å£²å®çžŸã远跡ããå°åã®ãã¬ã³ããç¹å®ããããã«å¿ããŠããŒã±ãã£ã³ã°æŠç¥ã調æŽããããšãã§ããŸãã
- æè²: ã€ã³ã¿ã©ã¯ãã£ããªããããã¯ãåŠç¿äœéšãåäžãããè€éãªæŠå¿µãããã¢ã¯ã»ã¹ããããããããã«äœ¿çšã§ããŸããæ°åŠé¢æ°ãç§åŠã·ãã¥ã¬ãŒã·ã§ã³ã®ã€ã³ã¿ã©ã¯ãã£ããªå¯èŠåã¯ãåŠçãæ ¹åºã«ããåçãããæ·±ãçè§£ããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ãç æ°ã®èå»¶ã瀺ãã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã·ã§ã³ã¯ãå ¬è¡è¡çä»å ¥ã«ã€ããŠäººã ã«æè²ããããã«äœ¿çšãããŸãã
çµè«
MatplotlibãŠã£ãžã§ããã¯ããŠãŒã¶ãŒãããŒã¿ãåçã«æ¢çŽ¢ããããæ·±ãæŽå¯ãåŸãããšãå¯èœã«ããã€ã³ã¿ã©ã¯ãã£ããªãããããäœæãã匷åãªæ¹æ³ãæäŸããŸããã¹ã©ã€ããŒããã¿ã³ãã©ãžãªãã¿ã³ããã§ãã¯ãã¿ã³ãããã¹ãããã¯ã¹ãããããããŠã³ã¡ãã¥ãŒãªã©ã®ãŠã£ãžã§ãããçµ±åããããšã§ãããŒã¿åæãšã³ãã¥ãã±ãŒã·ã§ã³ã匷åããé åçã§æ å ±è±å¯ãªèŠèŠåãäœæã§ããŸããåºæ¬çãªæŠå¿µã¯åçŽã§ãããããã©ãŒãã³ã¹æé©åãã«ã¹ã¿ã ãŠã£ãžã§ããäœæãªã©ã®é«åºŠãªãã¯ããã¯ãšèæ ®äºé ãç¿åŸããããšã§ãããã«å€§ããªå¯èœæ§ãè§£ãæŸã€ããšãã§ããŸããã€ã³ã¿ã©ã¯ãã£ããªãããããèšèšããéã«ã¯ãäžçäžã®ãªãŒãã£ãšã³ã¹ã«ãšã£ãŠèŠèŠåã广çã§ãŠãŒã¶ãŒãã¬ã³ããªãŒã§ããããšãä¿èšŒããããã«ãã·ã³ãã«ããæçããã¢ã¯ã»ã·ããªãã£ãåªå ããããšãå¿ããªãã§ãã ããã
ã€ã³ã¿ã©ã¯ãã£ããªå¯èŠåã¯åžžã«é²åããŠãããBokehãPlotlyãDashãªã©ã®ããŒã«ã¯ãWebããŒã¹ã®ã€ã³ã¿ã©ã¯ãã£ããªããããã®ä»£æ¿ãªãã·ã§ã³ãæäŸããŸãããããã®ã©ã€ãã©ãªãæ¢çŽ¢ããããšã§ãç¹ã«åºç¯ãªãªãŒãã£ãšã³ã¹åãã«ã€ã³ã¿ã©ã¯ãã£ããªããã·ã¥ããŒãããããã€ããå Žåã«ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã§å©ç¹ãåŸãããå¯èœæ§ããããŸãã